vhxubo's blog
关于

Node.js Streams

最早接触并使用 Node.js 的 Stream 流是在 gulp 中, gulp.src().pipe(someFunction).pipe(gulp.dest())

在 gulp 中, 使用的不是完整的 Stream, 而是自定义的 Vinyl 对象, 需要使用 Object Mode

'streaming' here refers specifically to the Vinyl file objects it generates—which are passed through plugins with objectMode.

通俗来说, pipe() 相当于融合了 on('data') 和 on('end') 两个事件

Readable -> Transform -> Writeable

创建 Stream 流

Stream 流的数据以 null 结尾

const { Readable } = require("stream");

const inStream = new Readable({
read(size) {
this.push(String.fromCharCode(this.currentCharCode++));
if (this.currentCharCode > 90) {
this.push(null);
}
},
});

inStream.currentCharCode = 65;

inStream.pipe(process.stdout);
// 输出 ABCDEFGHIJKLMNOPQRSTUVWXYZ
const { Transform } = require("stream");

const upperCaseTr = new Transform({
transform(chunk, encoding, callback) {
this.push(chunk.toString().toUpperCase());
callback();
},
});

process.stdin.pipe(upperCaseTr).pipe(process.stdout);

// 将输入转换为大写

参考链接